#! /usr/bin/env python
# -*- coding: utf-8 -*-

# Модуль для парсинга файла с элементами залегания плоскости трещин.
# Возвращает кортеж переменных:
# dir, dip, line, tr, look, lookdig, color, comments
# если какой то параметер не был найден в исходной строке, то в место него 
# возвращается None

import re

def parse_line(line):
    pattern = r'^(-?[0-9]{1,3})\s+(-?[0-9]{1,2})(\s+[0-9]{1,3}(TR)?)?(\s+([a-z]*)([0-9])?)?(\s+(((1|1.|1.0|0|0?[.][0-9]),(1|1.|1.0|0|0?[.][0-9]),(1|1.|1.0|0|0?[.][0-9]))))?\s*(#.*)?$'
    match = re.search(pattern, line)
    if match:
        dir     = float(match.group(1))
        dip     = float(match.group(2))
        line    = match.group(3)
        tr      = match.group(4)
        if tr:
            line= float(line[:-2])
        elif line:
            line= float(line)
        look    = match.group(6)
        lookdig = match.group(7)
        if lookdig: lookdig = float(lookdig)
        color = match.group(8)
        if color:
            color= [ float(x) for x in color.split(',')]
        else:
            color=[0,0,0]
        comments= match.group(14)
        if comments: comments=comments[1:]
        return [dir, dip, line, tr, look, lookdig, color, comments]
    return None

if __name__ == "__main__":
    print parse_line("196 38 360TR pml 1,0,0 # comment")
